package br.com.cast.syscast.uf.paginas;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.spring.injection.annot.SpringBean;

import br.com.cast.syscast.HomePage;
import br.com.cast.syscast.models.Uf;
import br.com.cast.syscast.services.UfService;
import br.com.cast.syscast.util.ComponentUtil;

public class ListarUf extends Panel {

	private static final long serialVersionUID = 1L;
	
	@SpringBean
	private UfService ufService;

	private CadastroUf cadastroUf;
	
	public ListarUf(String id) {
		super(id);
		
		cadastroUf = new CadastroUf(HomePage.ID_CONTEUDO);
		
		criaLinkIncluir();
		
		DataView<Uf> dataView = criaDataView();
		
		criaPaginacao(dataView);
	}

	private void criaPaginacao(DataView<Uf> dataView) {
		add(new PagingNavigator("paginacao", dataView));
	}

	private DataView<Uf> criaDataView() {
		DataView<Uf> dataView = new DataView<Uf>("ufs", ufService) {

			@Override
			protected void populateItem(final Item<Uf> item) {
				
				if (item.getIndex() % 2 != 0) {
					//para linhas impares adiciona um estilo diferente.
					//o indice começa no zero
					item.add(AttributeModifier.replace("class", "alt"));
				}
				
				item.add(new Label("sigla"));
				item.add(new Label("nome"));
				item.add(new Label("pais.nome"));
				
				item.add(new Link("alterar") {
					@Override
					public void onClick() {
						cadastroUf.atualizaModel(item.getDefaultModelObject());
						redirecionaCadastro(cadastroUf);
					}

				});
				
				item.add(new Link("excluir") {
					@Override
					public void onClick() {
						Uf uf = (Uf) item.getDefaultModelObject();
						ufService.excluir(uf.getId());
						HomePage template = ComponentUtil.getTemplate(this);
						template.success("Registro excluído com sucesso!");
					}
					
				});
				
			}
			
			
		};
		
		dataView.setItemsPerPage(5);
		
		add(dataView);
		
		return dataView;
	}

	private void criaLinkIncluir() {
		add(new Link("incluir") {
			@Override
			public void onClick() {
				redirecionaCadastro(cadastroUf);
			}
		});
	}

	private void redirecionaCadastro(final CadastroUf cadastroUf) {
		HomePage template = ComponentUtil.getTemplate(this);
		template.replace(cadastroUf);
	}
}
